#!/usr/bin/python3


print(
"""
hello python3
哈哈 python3
"""
)

# 变量类型
var_num = 99
var_float = 100.00
var_string= 'string'

print('变量类型')
print('整型：', var_num)
print('浮点：', var_float)
print('字符串：', var_string)

var_1 = var_2 = var_3 = '值都一样呢'
print('赋一样的值：', var_1, var_2, var_3)

var_num_m, var_float_m, var_string_m = 999, 1000.0, '多变量同时赋值'
print('多变量同时赋值：', var_num_m, var_float_m, var_string_m)


# python数据类型
# number 数字
# String 字符串
# bool 布尔型
# List 列表
# Tuple 元组
# Set 集合型
# Dictionary 字典型

# Number 数字类型
# Python3 支持 int、float、bool、complex（复数）
# 在Python3里，只有一种整数类型 int，表示为长整型，没有 python2 中的 Long
# 使用type()，可以查询变量所指的对象类型
print('\n# Number 数字类型')
print(type(var_num))
# 判断是否属于某个数据类型
print(isinstance(var_num, int))
print(isinstance(var_float, float))
# bool和number可以直接加减运算；True会转成1，False转成0
print(9 + True)
print(9 + False)

# String 字符串
# Python中的字符串用单引号 ' 或双引号 " 括起来，同时使用反斜杠 \ 转义特殊字符。
# 可以从字符串前面开始索引，起始值：0；也可以从字符串后面开始索引，起始值：-1；
print('\n# String 字符串')
str = 'Runoob Python3'
print(str)           # 打印整个字符串
print(str[0:-1])     # 打印字符串第一个到倒数第二个字符（不包含倒数第一个字符）
print(str[0])        # 打印字符串的第一个字符
print(str[2:5])      # 打印字符串第三到第五个字符（包含第五个字符）
print(str[2:])       # 打印字符串从第三个字符开始到末尾
print(str * 2)       # 打印字符串两次
print(str + " TEST")  # 打印字符串和"TEST"拼接在一起

# 字符串转义
print('换行符转义：Pytho\n3')
print(r'在前边加r，不转义，原文输出：Pytho\n3')


# List 列表数据
# 写在[]之间，用 , 分隔每个元素的列表
# 索引从0开始
print('\n# List 列表数据')
var_list = [11, 14, '离骚', True, ['35','70','13032']]
var_list_zb = [1066, 9968]
print(var_list[0])
print(var_list[2:3]) # 以下标2为起始，输出下边3之前的元素（不含下标3的元素）
print(var_list, var_list_zb)
print(var_list_zb * 2)
var_list[0] = 'List中的元素值可以改变，String不可以'
print(var_list)

# Tuple 元组
# 与list不一样的是，tuple写在小括号中
# 字符串相当于一种特殊的元组
# 元组中的元素不可以被修改
print('\n# Tuple 元组')
var_tuple = (11, 14, '离骚', True, ['35','70','13032'])
var_tuple_zb = (1066, 9968)
print(var_tuple[0])
print(var_tuple[2:3]) # 以下标2为起始，输出下边3之前的元素（不含下标3的元素）
print(var_tuple, var_tuple_zb)
print(var_tuple_zb * 2)
#var_tuple[0] = 'Tuple中的元素值不可以改变'
print(var_tuple)

print('一个元素的元组写法：tuple_one= (99,) 在元素后加“,”号；不加“,”表示普通数字。', (99,), 99)

# Set 集合
# Python 中的集合（Set）是一种无序、可变的数据类型，用于存储唯一的元素
# 集合中的元素不会重复，并且可以进行交集、并集、差集等常见的集合操作
# 在 Python 中，集合使用大括号 {} 表示，元素之间用逗号 , 分隔
# 另外，也可以使用 set() 函数创建集合
# 注意：创建一个空集合必须用 set() 而不是 { }，因为 { } 是用来创建一个空字典
print('\n# Set 集合')
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Baidu', 'Zhihu','Baidu'}
sites_key = 'Taobao22'
if sites_key in sites :
	print(sites_key + ' 在集合 sites中')
else:
	print(sites_key + ' 不在集合 sites中')

# Dictionary 字典
# 列表是有序的对象集合，字典是无序的对象集合。
# 字典当中的元素是通过键来存取的，而不是通过偏移存取
# 字典是一种映射类型，字典用 { } 标识，它是一个无序的 键(key) : 值(value) 的集合
print('\n# Dictionary 字典')
dict = {}
dict['k1'] = 'v1'
dict['k2'] = 'v2'
print(dict)

initdict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
# `{}`中的值有一个不带key，则默认为集合；大括号在使用时，里边要么全部带key（识别为字典），要么全部不带key为无序集合。
# initdict = {'bbb', 'ccc', 'd':'ddd'}
print(initdict)
print('initdict.keys()：', initdict.keys())
print('initdict.values()：', initdict.values())
fuzade_dict = {'list':[4,6,8], 'set':{'set1','set2'}, 'string':'字符串呢', 'num':233}
print('字典的value可以是list、set、序列之类的吗？', fuzade_dict, '; 取出指定key（dict[key]）：', fuzade_dict['list'], fuzade_dict['string'])


# bytes 不可变的二进制序列
# 元素值是 0 ~ 255 的整数值，而不是 Unicode 字符
# bytes 类型通常用于处理二进制数据，比如图像文件、音频文件、视频文件等等。
# 在网络编程中，也经常使用 bytes 类型来传输二进制数据。
# 使用 bytes() 函数创建二进制
# 或者 b'value' 创建二进制类型
print('\n# bytes 不可变的二进制序列')
ejz = bytes('hello python3', 'utf-8')
print(ejz)

#print(16666.66 + 1692.89 + 4666.65+343.84 + 15000+968.97)

# 数据转换
# 同类型数据间隐式转换
# 不同类型的数据需显式转换
# float(var1) = float
# int(var1) = int
# str(var1) = string
s = bytes('1', 'utf-8')
print('将序列转换成元组：tuple(s)=', tuple(s), s)
print('将序列转换成列表：list(s)=', list(s), s)

# 运算符
a = 20
print('变量a的3次方：a**3=', a**3)
print('取整除（丢弃小数位的取整）：a//3=', a//3, '; a/3=', a/3)

# 位运算符
# & 按位与运算符：参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
# | 按位或运算符：只要对应的二个二进位有一个为1时，结果位就为1
# ^ 按位异或运算符：当两对应的二进位相异时，结果为1
# ~ 按位取反运算符：对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1
# << 左移动运算符：运算数的各二进位全部左移若干位，由"<<"右边的数指定移动的位数，高位丢弃，低位补0。
# >> 右移动运算符：把">>"左边的运算数的各二进位全部右移若干位，">>"右边的数指定移动的位数

# 逻辑运算符
# 与 and;
# 或 or;
# not 非;
# 成员运算符；用于判断一个元素是否存在于某个list、tuple中
#	in; not in;

# 条件控制语句
# if elif else
'''
grade = input('请选择你的性别（男/女）：')
print('')
if grade=='男':
	print('你选择了男；')
elif grade=='女':
	print('你选择了女；')
else:
	print('你选择了保密；')
'''


# while循环；
import random
print('猜数字游戏：')
"""
number = random.choice(range(10))
guess = 0
while guess != number:
	guess = int(input('输入一个数字，范围1~10，看看你有没有猜中：'))
	if guess > number:
		print('猜的数字大了；')
	elif guess < number:
		print('猜的数字小了；')
	else:
		print('恭喜你，猜对了！这个数字是：', number)
		break;
"""
# 循环语句
# while else 语句
"""
while 表达式 :
	逻辑体1
else:
	逻辑体2
"""
# for语句
"""
for yuansu in list:
	逻辑体
else:
	# 当循环完毕会执行else中的逻辑；如果是break跳出，那么不会执行；
	逻辑体2
"""
# match case 等同于 switch case; 其中，python3 的 “case _:” 语句表示 default
"""

"""

#print(203671+4538+50155+4583+51934+7042+36333+42469+8250+20723+23133+55560.03)


